package com.my.code.map;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * LinkedHashMap继承自HashMap，默认的遍历顺序是元素的插入顺序，是非线程安全的
 * @author zzl
 * @date 2020/9/9
 */
public class LinkedHashMapSample {

    public static void main(String[] args) {
        /*
         * 注意第三个参数 accessOrder=true时，每次访问后会将节点移动到最后，否则就是默认的插入顺序
         */
        LinkedHashMap<String, String> orderMap = new LinkedHashMap<String, String>(16, 0.75f, true) {
            /**
             * 实现自定义删除策略，淘汰旧的数据，如果accessOrder=true，则淘汰最少访问的数据
             * 如果accessOrder=false，按照插入时间最早的删除
             */
            @Override
            protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
                return size() > 3;
            }
        };

        orderMap.put("p2", "Panama");
        orderMap.put("p1", "Valhalla");
        orderMap.put("p3", "Loom");
        System.out.println();
        orderMap.forEach((k, v) -> System.out.println(k + " : " + v));

        //模拟访问
        orderMap.get("p1");
        orderMap.get("p2");//p2将放到链表的最后

        orderMap.put("p4", "Ama");

        System.out.println("\nsecond trav: ");
        orderMap.forEach((k, v) -> System.out.println(k + " : " + v));
    }

}
